package com.apps.smodule.PengDB.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * SpiderDB本地内存数据库操作类
 */
@Slf4j
@Service
public  class SpiderDB<K, V> {

    //key集合
    private HashMap<K, Long> expiryMap = new HashMap<>();

    //数据集合
    private Map<K,V> db=new HashMap<>();

    public int count=0;

    //给key设置过期时间
    public  boolean expire(K key, long time)
    {
            if (null == db.get(key))
                return false;
            expiryMap.put(key, System.currentTimeMillis() + time);
            return true;
    }
    //获取某个key的过期时间
    public  long getExpire(K key)
    {
            return expiryMap.get(key);
    }
    //按key获取值
    public  V get(K key)
    {
            if (null == key) {
                return null;
            }
            //如果没有设置过期时间直接从数据库取出返回
            if (null == expiryMap.get(key))
                return db.get(key);
            //否则判断如果已经过期则删除
            long expiryTime = expiryMap.get(key);
            if (System.currentTimeMillis() >= expiryTime) {
                del(key);
                return null;
            }
            //没过期则正常返回key
            return db.get(key);
    }
    //判断key是否存在
    public   boolean hasKey(K key)
    {
            if (null == db.get(key))
                return false;
            return true;
    }
    //删除某个key
    @SuppressWarnings("unchecked")
    public  void del(K... key)
    {
            for (K k : key) {
                expiryMap.remove(k);
                db.remove(k);
            }
    }
    //无过期时间数据塞入
    public V  set(K key, V value)
    {
            return db.put(key, value);
    }
    //有过期时间数据塞入
    public  V set(K key, V value, long expiryTime)
    {
            expiryMap.put(key, System.currentTimeMillis() + expiryTime);
            return db.put(key, value);
    }


}
